/*
 * RWLock.h
 *
 *  Created on: Mar 23, 2012
 *      Author: s146913
 */

#ifndef RWLOCK_H_
#define RWLOCK_H_

#include <iostream>
#include "conc/Monitor.h"
#include "conc/Thread.h"
#include <assert.h>


using namespace std;

enum Type {
	READER,
	WRITER
};

class RWLock : public Monitor {
public:
	RWLock(int keuze, const char* type);

	void rdlock();
	void wrlock();
	void unlock();
private:
	int writers;
	int readers;
	int wReaders;
	int wWriters;
	int keuze; /**
	1. Een (1) wachtende schrijver krijgt voorrang t.o.v. (nieuwe) lezers.
	2. Alle schrijvers krijgen voorrang t.o.v. (nieuwe/wachtende) lezers.
	3. Alle lezers krijgen voorrang t.o.v. (nieuwe/wachtende) schrijvers.
	*/
	void keuze1();
	void keuze2();
	void keuze3();
	void kiesOpvolgers();

	void	dumpState( const char *mesg );

};

#endif /* RWLOCK_H_ */
